package com.example.stukotlin

import com.alibaba.android.arouter.facade.annotation.Route
import com.example.common.base.AbsActivity
import com.example.stukotlin.databinding.ActKotMainBinding

fun main() {
    println("hello world")
    val value = sum(4, 9)
    val value2 = sum3(5, 6)
    println(value)
    println(value2)

    //--------------------------
    fun5(1, 2, 3)  //123

    //———————————————匿名函数—————————————————
    val sumLambda: (Int, Int) -> Int = {x, y->x+y}
    println(sumLambda(1,2))

    //------------变量、常量----------------

    /**
     * 常量与变量都可以没有初始化值,但是在引用前必须初始化
     * 编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断
     */
    //可变变量：var <标识符> : <类型> = <初始化值>
    //不可变常量：val <标识符> : <类型> = <初始化值>
    val a:Int=1
    val b=2 //系统自动推断变量类型 Int
    val c:Int //不在声明时初始化数据须提供变量类型
    var d=5

    //-----------字符串模板-----------------

    //$表示一个变量值或变量名
    //$varName:表示变量值
    //${varName.fun()}：表示变量的方法的返回值

    val e=1
    val s1 = "e is $e"
    println(s1)

    var f=2
    var s2="${s1.replace("is","was")},but now is $a"
    println(s2)

    //--------------NULL检查机制-----------------

    //字段后面加!!，抛空异常
    //字段后面加?，不做处理，返回值为null;或配合？

    var age: String? ="12"
    val h=age?:2.toInt()  //为空返回2
    val i=age?.toInt()  //为空返回null
    val j=age!!.toInt()  //为空抛空指针
    println(age)

}

/**
 * Int参数，Int返回值
 */
fun sum(a: Int, b: Int): Int {
    return a + b
}

/**
 * 表达式作为函数体，自动推断返回值类型
 */
fun sum2(a: Int, b: Int) = a + b

/**
 * 权限修饰符函数
 */
public fun sum3(a: Int, b: Int) = a + b

/**
 * 无返回值函数，可以省略Unit
 */
fun fun4(): Unit {

}

/**
 * 可变长参数函数：vararg
 */
fun fun5(vararg v: Int) {
    for (vt in v) {
        print(vt)
    }
}

/**
 * 匿名函数 （lambda）
 */

/**
 * 变量、常量
 */


/**
 * Activity
 */
@Route(path = "/stuKotlin/main")
class MainKotActivity : AbsActivity<ActKotMainBinding>() {

    override fun getLayoutId(): Int {
        return R.layout.act_kot_main
    }

    override fun main() {

    }

    override fun initListener() {

    }

}